iT邦幫忙

2022 iThome 鐵人賽

DAY 1
0
自我挑戰組

嘗試30天學「不」會Rust系列 第 1

[Rust] 安裝教學與Hello, World!

  • 分享至 

  • xImage
  •  

環境

OS: Windows 10
Editor: Visual Studio Code
Rust version: 1.63.0

開篇廢話

不知不覺今年是參加鐵人賽已經第三年了,當初是我朋友邀請我的,但今年好像只剩我一個人了...
一個人也沒關係!今年決定來學一門新語言 - Rust,從18年開始看著他日漸成熟,是時候再來會會它了。

安裝環境

我使用的是Windows系統,所以進入官網點選立即開始之後,就會導到Windows版本的頁面。

依據你作業系統的位元,跟著他的指示,就安裝完畢了!裝完之後,下指令看是不是安裝完成,選擇預設的情況會把套件路徑設置到你的PATH環境變數裡。

打開CMD輸入:

rustc --version

查看是否安裝成功。

然後根據使用的Editor安裝建議的Plugin,我使用的是VS Code,連結的話在上面官網-立即開始其他工具

接下來就可以開始所有程式語言的第一堂課 - Hello, World! 了。

Hello, World! Hello, Rust!

Cargo

cargo是rust的專案管理與套件管理器,輸入:

cago new [project-name]

就可以新增專案了。

用官網給出的範例:

cago new hello-rust

就快速把一個Hello, World!的範例建立出來了。
由於有裝git,下cargo new的時候也把git.gitignore初始化了。

還有一個Cargo.toml的文件,這個就是管理套件和專案的config文件了。

然後再來就是建置了,官方給的教學是

cargo run

這表示了編譯執行,如果只是要編譯的話:

cargo build

之後就會再專案資料夾裡看到target的資料夾,裡面放的是執行檔跟編譯期間的中間文件,還有一個Cargo.lock的文件,這個下面會解釋。

再接著,如果要把build target清除的話,下:

cargo clean

下載第三方套件

上面說到,編譯的時候產生了一個Cargo.lock的文件,這裡就用官網最後的一個範例做解釋。

跟著說明把ferris-says這個第三方套件加到我們的Cargo.toml裡面

會長這樣

[package]
name = "hello-rust"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
ferris-says = "0.2"

然後再到main.rs加入

use ferris_says::say;

表示引用這個module,然後編譯,就可以看到Cargo.lock多了很多東西,下面是我的環境下產生的:

# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3

[[package]]
name = "basic"
version = "0.1.0"
dependencies = [
 "ferris-says",
]

[[package]]
name = "ferris-says"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9515ec2dd9606ec230f6b2d1f25fd9e808a2f2af600143f7efe7e5865505b7aa"
dependencies = [
 "smallvec",
 "textwrap",
 "unicode-width",
]

[[package]]
name = "smallvec"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f90c5e5fe535e48807ab94fc611d323935f39d4660c52b26b96446a7b33aef10"

[[package]]
name = "smawk"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"

[[package]]
name = "textwrap"
version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd05616119e612a8041ef58f2b578906cc2531a6069047ae092cfb86a325d835"
dependencies = [
 "smawk",
 "unicode-width",
]

[[package]]
name = "unicode-width"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"

這些是ferris-says引用的套件,他會如大多的套件管理器一樣,把有用到的相依套件下載下來。

下面是完整範例:

use ferris_says::say; // from the previous step
use std::io::{stdout, BufWriter};

fn main() {
    let stdout = stdout();
    let message = String::from("Hello fellow Rustaceans!");
    let width = message.chars().count();

    let mut writer = BufWriter::new(stdout.lock());
    say(message.as_bytes(), width, &mut writer).unwrap();
}

編譯之後,可以得到一個更酷炫的Hello, World!

最後,可以到ferris-saysCargo.toml比對看看,確實我們的Hello, World!範例增加了這些套件。

Reference


下一篇
[Rust] 變數與基本型別
系列文
嘗試30天學「不」會Rust18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言